<!DOCTYPE HTML>
<html lang="zh-CN">


<head>
    <meta charset="utf-8">
    <meta name="keywords" content="PowerPlatform认证备考（6）—— 如何构建模型驱动的应用, 码道诚公">
    <meta name="description" content="">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
    <meta name="renderer" content="webkit|ie-stand|ie-comp">
    <meta name="mobile-web-app-capable" content="yes">
    <meta name="format-detection" content="telephone=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
    <meta name="baidu-site-verification" content="code-oqVlgh2wQV" />
    <meta name="google-site-verification" content="Z-8Fm46WY6NL_3kxilmoqToW4jnvyF7boTgciTLBXUs" />
    <!-- Global site tag (gtag.js) - Google Analytics -->


    <title>PowerPlatform认证备考（6）—— 如何构建模型驱动的应用 | 码道诚公</title>
    <link rel="icon" type="image/png" href="/favicon.png">

    <link rel="stylesheet" type="text/css" href="/libs/awesome/css/all.css">
    <link rel="stylesheet" type="text/css" href="/libs/materialize/materialize.min.css">
    <link rel="stylesheet" type="text/css" href="/libs/aos/aos.css">
    <link rel="stylesheet" type="text/css" href="/libs/animate/animate.min.css">
    <link rel="stylesheet" type="text/css" href="/libs/lightGallery/css/lightgallery.min.css">
    <link rel="stylesheet" type="text/css" href="/css/matery.css">
    <link rel="stylesheet" type="text/css" href="/css/my.css">

    <script src="/libs/jquery/jquery.min.js"></script>

<meta name="generator" content="Hexo 5.2.0">
<style>.github-emoji { position: relative; display: inline-block; width: 1.2em; min-height: 1.2em; overflow: hidden; vertical-align: top; color: transparent; }  .github-emoji > span { position: relative; z-index: 10; }  .github-emoji img, .github-emoji .fancybox { margin: 0 !important; padding: 0 !important; border: none !important; outline: none !important; text-decoration: none !important; user-select: none !important; cursor: auto !important; }  .github-emoji img { height: 1.2em !important; width: 1.2em !important; position: absolute !important; left: 50% !important; top: 50% !important; transform: translate(-50%, -50%) !important; user-select: none !important; cursor: auto !important; } .github-emoji-fallback { color: inherit; } .github-emoji-fallback img { opacity: 0 !important; }</style>
<link rel="alternate" href="/atom.xml" title="码道诚公" type="application/atom+xml">
<link rel="stylesheet" href="/css/prism-tomorrow.css" type="text/css"></head>




<body>
    <header class="navbar-fixed">
    <nav id="headNav" class="bg-color nav-transparent">
        <div id="navContainer" class="nav-wrapper container">
            <div class="brand-logo">
                <a href="/" class="waves-effect waves-light">
                    
                    <img src="/medias/logo.png" class="logo-img" alt="LOGO">
                    
                    <span class="logo-span">码道诚公</span>
                </a>
            </div>
            

<a href="#" data-target="mobile-nav" class="sidenav-trigger button-collapse"><i class="fas fa-bars"></i></a>
<ul class="right nav-menu">
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/" class="waves-effect waves-light">
      
      <i class="fas fa-home" style="zoom: 0.6;"></i>
      
      <span>首页</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/tags" class="waves-effect waves-light">
      
      <i class="fas fa-tags" style="zoom: 0.6;"></i>
      
      <span>标签</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/categories" class="waves-effect waves-light">
      
      <i class="fas fa-bookmark" style="zoom: 0.6;"></i>
      
      <span>分类</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/archives" class="waves-effect waves-light">
      
      <i class="fas fa-archive" style="zoom: 0.6;"></i>
      
      <span>归档</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/about" class="waves-effect waves-light">
      
      <i class="fas fa-user-circle" style="zoom: 0.6;"></i>
      
      <span>关于</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/contact" class="waves-effect waves-light">
      
      <i class="fas fa-comments" style="zoom: 0.6;"></i>
      
      <span>留言板</span>
    </a>
    
  </li>
  
  <li class="hide-on-med-and-down nav-item">
    
    <a href="/friends" class="waves-effect waves-light">
      
      <i class="fas fa-address-book" style="zoom: 0.6;"></i>
      
      <span>友情链接</span>
    </a>
    
  </li>
  
  <li>
    <a href="#searchModal" class="modal-trigger waves-effect waves-light">
      <i id="searchIcon" class="fas fa-search" title="搜索" style="zoom: 0.85;"></i>
    </a>
  </li>
</ul>


<div id="mobile-nav" class="side-nav sidenav">

    <div class="mobile-head bg-color">
        
        <img src="/medias/logo.png" class="logo-img circle responsive-img">
        
        <div class="logo-name">码道诚公</div>
        <div class="logo-desc">
            
            Never really desperate, only the lost of the soul.
            
        </div>
    </div>

    

    <ul class="menu-list mobile-menu-list">
        
        <li class="m-nav-item">
	  
		<a href="/" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-home"></i>
			
			首页
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/tags" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-tags"></i>
			
			标签
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/categories" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-bookmark"></i>
			
			分类
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/archives" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-archive"></i>
			
			归档
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/about" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-user-circle"></i>
			
			关于
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/contact" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-comments"></i>
			
			留言板
		</a>
          
        </li>
        
        <li class="m-nav-item">
	  
		<a href="/friends" class="waves-effect waves-light">
			
			    <i class="fa-fw fas fa-address-book"></i>
			
			友情链接
		</a>
          
        </li>
        
        
    </ul>
</div>


        </div>

        
    </nav>

</header>

    



<div class="bg-cover pd-header post-cover" style="background-image: url('/medias/featureimages/8.jpg')">
    <div class="container" style="right: 0px;left: 0px;">
        <div class="row">
            <div class="col s12 m12 l12">
                <div class="brand">
                    <h1 class="description center-align post-title">PowerPlatform认证备考（6）—— 如何构建模型驱动的应用</h1>
                </div>
            </div>
        </div>
    </div>
</div>




<main class="container content">

    
    <!-- 文章内容详情 -->
<div id="artDetail">
    <div class="card">
        <div class="card-content article-info">
            <div class="row tag-cate">
                <div class="col s7">
                    
                    <div class="article-tag">
                        
                            <a href="/tags/PowerPlatform%E8%AE%A4%E8%AF%81/">
                                <span class="chip bg-color">PowerPlatform认证</span>
                            </a>
                        
                    </div>
                    
                </div>
                <div class="col s5 right-align">
                    
                    <div class="post-cate">
                        <i class="fas fa-bookmark fa-fw icon-category"></i>
                        
                            <a href="/categories/PowerPlatform/" class="post-category">
                                PowerPlatform
                            </a>
                        
                    </div>
                    
                </div>
            </div>

            <div class="post-info">
                
                <div class="post-date info-break-policy">
                    <i class="far fa-calendar-minus fa-fw"></i>发布日期:&nbsp;&nbsp;
                    2020-11-16
                </div>
                

                

                
                <div class="info-break-policy">
                    <i class="far fa-file-word fa-fw"></i>文章字数:&nbsp;&nbsp;
                    6k
                </div>
                

                
                <div class="info-break-policy">
                    <i class="far fa-clock fa-fw"></i>阅读时长:&nbsp;&nbsp;
                    21 分
                </div>
                

                
            </div>
        </div>
        <hr class="clearfix">
        <div class="card-content article-card-content">
            <div id="articleContent">
                <p>模型驱动的应用程序设计是一种专注于向应用程序添加仪表板，表单，视图和图表的方法。 几乎没有代码，您就可以构建简单或非常复杂的应用程序。</p>
<p>在画布应用程序中，应用程序制造商可以完全控制应用程序的布局。 另一方面，在模型驱动的应用程序中，大部分布局由您添加的组件决定。 重点更多是在快速查看业务数据和制定决策上，而不是在复杂的应用程序设计上。</p>
<p>在本模块中，您将：</p>
<ul>
<li>了解什么是模型驱动的应用程序以及它们与画布应用程序有何不同</li>
<li>了解模型驱动的应用程序的构建基块</li>
<li>了解如何创建和设计模型驱动的应用</li>
<li>了解如何更改安全性和共享模型驱动的应用程序</li>
</ul>
<h2 id="模型驱动应用"><a href="#模型驱动应用" class="headerlink" title="模型驱动应用"></a>模型驱动应用</h2><p>模型驱动的应用程序设计是一种针对组件的应用程序开发方法。 模型驱动的应用程序设计不需要代码，您制作的应用程序可以很简单也可以很复杂。 与设计人员完全控制应用布局的canvas应用开发不同，大部分布局是由模型驱动的应用决定的，并且主要由你添加到应用中的组件指定。</p>
<p><img src="/posts/f1a42108/basic-model-driven-app.png" alt="Sample model-driven app"></p>
<h3 id="制作模型驱动的应用程序的方法"><a href="#制作模型驱动的应用程序的方法" class="headerlink" title="制作模型驱动的应用程序的方法"></a>制作模型驱动的应用程序的方法</h3><p>模型驱动的应用程序具有三个设计阶段：</p>
<ol>
<li>为您的业务数据建模</li>
<li>定义您的业务流程</li>
<li>编译应用</li>
</ol>
<h3 id="为业务数据建模"><a href="#为业务数据建模" class="headerlink" title="为业务数据建模"></a>为业务数据建模</h3><p>模型驱动的设计使用元数据驱动的体系结构，以便设计人员无需编写代码即可自定义应用程序。 要对业务数据进行建模，您可以确定应用程序将需要哪些数据以及该数据将如何与其他数据相关联。 元数据是指有关数据的数据，并定义存储在通用数据服务中的数据的结构。</p>
<h3 id="定义您的业务流程"><a href="#定义您的业务流程" class="headerlink" title="定义您的业务流程"></a>定义您的业务流程</h3><p>定义和执行一致的业务流程是模型驱动的应用程序设计的关键方面。 一致的流程有助于确保您的应用程序用户可以专注于他们的工作，而不必担心要执行一组手动步骤。 过程可以是简单的，也可以是复杂的，并且它们经常随时间变化。</p>
<h3 id="编译应用"><a href="#编译应用" class="headerlink" title="编译应用"></a>编译应用</h3><p>在对数据建模和定义流程之后，您可以通过在App Designer中选择和设置所需的组件来构建应用程序。</p>
<p><img src="/posts/f1a42108/app-designer.png" alt="App Designer"></p>
<h2 id="模型驱动的应用程序的构建块"><a href="#模型驱动的应用程序的构建块" class="headerlink" title="模型驱动的应用程序的构建块"></a>模型驱动的应用程序的构建块</h2><p>模型驱动的应用程序由几个组件组成，您可以使用应用程序设计器来选择这些组件。组件和组件属性成为元数据。让我们更仔细地看看这些组件。</p>
<h3 id="Data"><a href="#Data" class="headerlink" title="Data"></a>Data</h3><p>下表显示了组成模型驱动的应用程序的各种数据组件，这些组件可以确定应用程序将基于什么数据。 它还显示了使用什么设计器来创建或编辑数据组件。</p>
<table>
<thead>
<tr>
<th align="left"><strong>Component</strong></th>
<th align="left"><strong>Description</strong></th>
<th align="left"><strong>Designer</strong></th>
</tr>
</thead>
<tbody><tr>
<td align="left">Entity</td>
<td align="left">实体是具有您要跟踪的属性的项目。 示例如联系人和客户。 系统中有许多标准实体。 您也可以自定义非系统标准实体（或生产实体）， 或者从头开始创建自定义实体。</td>
<td align="left">Entity designer</td>
</tr>
<tr>
<td align="left">Field</td>
<td align="left">字段是与实体相关联的属性，可帮助定义该实体。字段是由数据类型定义的，它决定了可以输入或选择的数据类型。数据类型的示例包括文本，数字，日期和时间，货币和查找关系（这会与另一个实体建立关系）。 字段通常用于表单，视图和搜索中。</td>
<td align="left">Entity designer</td>
</tr>
<tr>
<td align="left">Relationship</td>
<td align="left">关系定义实体之间如何相互关联。 有1：N（一对多），N：1（多对一）和N：N（多对多）关系。 例如，向实体添加查找字段会在两个实体之间创建新的1：N关系，并使您可以将该查找字段添加到表单。</td>
<td align="left">Entity designer</td>
</tr>
<tr>
<td align="left">Option set field</td>
<td align="left">这种类型的字段显示一个控件，该控件使用户可以在预定义选项中进行选择。 每个选项都有一个数字值和一个标签。 选项集字段可以要求一个值或多个值。</td>
<td align="left">Entity designer</td>
</tr>
</tbody></table>
<h3 id="User-interface"><a href="#User-interface" class="headerlink" title="User interface"></a>User interface</h3><p>下表显示了用户界面组件，这些组件确定用户将如何与应用程序交互以及使用什么设计器来创建或编辑组件。</p>
<table>
<thead>
<tr>
<th align="left"><strong>Component</strong></th>
<th align="left"><strong>Description</strong></th>
<th align="left"><strong>Designer</strong></th>
</tr>
</thead>
<tbody><tr>
<td align="left">App</td>
<td align="left">应用程序确定应用程序的基础知识，例如组件，属性，客户端类型和URL。</td>
<td align="left">App designer</td>
</tr>
<tr>
<td align="left">Site map</td>
<td align="left">站点地图指定应用程序的导航。</td>
<td align="left">Site map designer</td>
</tr>
<tr>
<td align="left">Form</td>
<td align="left">表单包括给定实体的一组数据输入字段。 这组数据输入字段与您的组织为实体跟踪的项目匹配。 一个示例是一组数据输入字段，用户可以在其中输入相关信息来跟踪客户的先前订单以及特定的请求重新订购日期。</td>
<td align="left">Form designer</td>
</tr>
<tr>
<td align="left">View</td>
<td align="left">视图定义了特定实体的记录列表如何在您的应用中显示。 视图定义了显示的列，每列的宽度，排序行为和默认过滤器。</td>
<td align="left">View designer</td>
</tr>
</tbody></table>
<p><img src="/posts/f1a42108/user-interface-form.png" alt="App designer and form designer"></p>
<h3 id="Logic"><a href="#Logic" class="headerlink" title="Logic"></a>Logic</h3><p>逻辑组件确定应用程序将具有哪些业务流程，规则和自动化。 Microsoft Power Apps制造商使用特定于流程或规则类型的设计器。</p>
<table>
<thead>
<tr>
<th align="left"><strong>Component</strong></th>
<th align="left"><strong>Description</strong></th>
<th align="left"><strong>Designer</strong></th>
</tr>
</thead>
<tbody><tr>
<td align="left">Business process flow</td>
<td align="left">业务流程流将引导用户完成标准业务流程。 如果您希望每个人都以相同的方式处理客户服务请求，请使用业务流程。 或者，您可以使用业务流程来要求员工在提交订单之前获得发票的批准。</td>
<td align="left">Business process flow designer</td>
</tr>
<tr>
<td align="left">Workflow</td>
<td align="left">工作流无需用户界面即可自动执行业务流程。 设计人员使用工作流来启动不需要任何用户交互的自动化。</td>
<td align="left">Workflow designer</td>
</tr>
<tr>
<td align="left">Actions</td>
<td align="left">操作是一种允许您直接从工作流手动调用行为(包括自定义操作)的流程类型。</td>
<td align="left">Process designer</td>
</tr>
<tr>
<td align="left">Business rule</td>
<td align="left">业务规则将规则或推荐逻辑应用于表单，以设置字段需求，隐藏或显示字段，验证数据等。 应用程序设计人员使用简单的界面来实现和维护快速变化的常用规则。</td>
<td align="left">Business rule designer</td>
</tr>
<tr>
<td align="left">Flows</td>
<td align="left">Power Automate是一项基于云的服务，可让您在应用程序和服务之间创建自动化的工作流程，以获取通知，同步文件，收集数据等。</td>
<td align="left">Power Automate</td>
</tr>
</tbody></table>
<h3 id="Visualization"><a href="#Visualization" class="headerlink" title="Visualization"></a>Visualization</h3><p>可视化组件决定应用程序将显示和可用的数据和报告类型，以及使用哪个设计器创建或编辑该组件。</p>
<table>
<thead>
<tr>
<th align="left"><strong>Component</strong></th>
<th align="left"><strong>Description</strong></th>
<th align="left"><strong>Designer</strong></th>
</tr>
</thead>
<tbody><tr>
<td align="left">Chart</td>
<td align="left">图表是单独的图形可视化，可以显示在视图或表单中，也可以添加到仪表板中。</td>
<td align="left">Chart designer</td>
</tr>
<tr>
<td align="left">Dashboard</td>
<td align="left">仪表板在一个位置显示一个或多个图形可视化组件，提供可操作业务数据的概述。</td>
<td align="left">Dashboard designer</td>
</tr>
<tr>
<td align="left">Embedded Microsoft Power BI</td>
<td align="left">Power BI将嵌入式Power BI磁贴和仪表板添加到您的应用程序。 Power BI是一项基于云的服务，可提供商业智能（BI）洞察力。</td>
<td align="left">chart designer, dashboard designer, and Power BI</td>
</tr>
</tbody></table>
<p>模型驱动的应用程序中的一些可视化示例：</p>
<p><img src="/posts/f1a42108/model-driven-visualizations.png" alt="Sample dashboard"></p>
<h2 id="模型驱动的应用程序的设计"><a href="#模型驱动的应用程序的设计" class="headerlink" title="模型驱动的应用程序的设计"></a>模型驱动的应用程序的设计</h2><p>下面是一个名为Fundraiser（资金筹集器）的模型驱动应用程序的设计示例。如您所见，有两个实体:Donation（捐赠物）和Fundraiser（募捐者）。每个实体还包含四个资源：</p>
<ul>
<li><strong>Forms</strong> – 定义用户如何查看数据并与之交互。</li>
<li><strong>Views</strong> – 每个实体的记录的列表视图。</li>
<li><strong>Charts</strong> - 以有意义的、可视化的方式显示数据。</li>
<li><strong>Dashboards</strong> – 提供有洞察力的、图形化的数据概览</li>
</ul>
<p><img src="/posts/f1a42108/fundraiser-app-designer.png" alt="Model driven app layout in studio."></p>
<p>通过选择右上角的“播放”按钮，该应用将进入“播放”模式。 您可以看到它看上去完全不同，并根据设计过程中的选择显示数据。</p>
<p><img src="/posts/f1a42108/app-play-mode.png" alt="Model driven app in play mode."></p>
<h3 id="了解用户的需求"><a href="#了解用户的需求" class="headerlink" title="了解用户的需求"></a>了解用户的需求</h3><p>对于模型驱动的应用程序，名称就说明了一切。 您的主要设计目标是按顺序获取Common Data Service数据模型。 有了这个，您就可以连接Power Apps，并且将从该模型为您创建一个模型驱动的应用程序。</p>
<p>使用App Designer创建模型驱动的应用程序。 您将选择要在应用程序中使用的实体，仪表板，业务流程，表单和其他组件，然后将为您创建该应用程序。 这意味着您将需要花费更多的时间来理解用户的需求，而不是外观。</p>
<h4 id="数据模型"><a href="#数据模型" class="headerlink" title="数据模型"></a>数据模型</h4><p>在开始数据建模过程时，有两个重要的问题要问自己：</p>
<ul>
<li>您的解决方案将存储和收集哪种类型的数据？</li>
<li>这些数据与您正在使用的其他数据如何关联或整合？</li>
</ul>
<p>这些问题在设计模型驱动的应用程序时很重要，因为这关系到模型驱动的应用程序是如何工作的。请记住，模型驱动的应用程序使用元数据驱动的体系结构。 这意味着大部分由模型驱动的应用程序都是基于数据建模的方式，并且无需编写自定义代码即可更改应用程序设计。</p>
<p>您可以通过查看通用数据服务中的实体来查看应用程序元数据。</p>
<p><img src="/posts/f1a42108/entity-metadata.png" alt="Example of metadata."></p>
<p>您还可以查看应用程序的播放模式，以预览应用程序的外观。</p>
<p><img src="/posts/f1a42108/entity-play-mode.png" alt="Example of app in play mode."></p>
<p>在上面的示例中，对于Fundraiser实体，需要收集几个数据片段，例如：</p>
<ul>
<li>Name</li>
<li>Fundraiser Goal</li>
<li>Owner</li>
<li>Total Donations</li>
<li>Created On</li>
</ul>
<p>在考虑数据模型时，还应考虑字段类型。 在“通用数据服务”中将字段添加到实体时，您选择的字段类型将确定用户如何在模型驱动的应用程序中输入和查看字段。 选项集显示为下拉列表，货币显示为货币符号，而十进制数字不会显示符号。 实体中的这些小变化可以对用户体验您的应用的方式产生深远的影响。</p>
<p>下面的屏幕截图显示了Fields的示例以及再次使用Fundraiser示例时可能具有的不同数据类型。</p>
<p><img src="/posts/f1a42108/fundraiser-entity-default-fields.png" alt="Fundraiser entity default fields"></p>
<p>如果需要将字段类型更改为其他字段类型（即，将文本字段更改为选项集），则需要删除该字段并使用正确的字段类型重新创建。 这将导致您丢失与该字段关联的所有数据。</p>
<h4 id="业务逻辑"><a href="#业务逻辑" class="headerlink" title="业务逻辑"></a>业务逻辑</h4><p>在您的应用程序中纳入业务逻辑时，有两个主要选项可用。 您可以在公共数据服务实体上设置业务规则（<strong>Business Rules</strong>），也可以构建业务流程（<strong>Business Process Flows</strong>）。</p>
<p>使用业务规则，您将在数据层定义行为。 这对于设置何时需要字段，设置默认值甚至基于条件显示或隐藏字段的条件非常有用。跟踪费用的实体就是一个例子。您可以使用一个表示旅行类型的字段，然后构建一个业务规则，规定如果用户选择automobile，那么里程字段是必需的，否则它是可选的。这使您能够确保在所有场景中保持数据一致性。</p>
<p>业务流程流用于指导用户使用您的应用程序。 这些工作流可以根据数据状态提供下一步的可视化效果，并便于您在用户使用应用程序时希望执行的其他操作。 通过业务流程流，您可以为应用程序带来自动化，并使其具有更多的指导性体验，而不仅仅是输入数据的地方。 如果您想更深入地了解业务流程，请查看此附加的Microsoft Learn模块：<a target="_blank" rel="noopener" href="https://docs.microsoft.com/learn/modules/work-with-business-process-flows-dynamics-365/%E3%80%82">https://docs.microsoft.com/learn/modules/work-with-business-process-flows-dynamics-365/。</a></p>
<h4 id="仪表板"><a href="#仪表板" class="headerlink" title="仪表板"></a>仪表板</h4><p>应用程序的常见输出需求是可视化数据。 为此，您可以使用自定义过滤器和可视化图形来实现仪表板，以将所有这些数据直接绑定到您的应用程序中。 创建仪表盘时，请确保用户使用起来很简单，而不会被所有数据淹没。 提供数据的高级快照，并允许他们使用过滤器以在需要时更深入地研究数据。</p>
<p><img src="/posts/f1a42108/dashboards-play-mode.png" alt="Dashboards in play mode."></p>
<h4 id="其他第三方解决方案和应用加速器"><a href="#其他第三方解决方案和应用加速器" class="headerlink" title="其他第三方解决方案和应用加速器"></a>其他第三方解决方案和应用加速器</h4><p>了解可供您使用的各种App加速器和第三方解决方案也很重要。 根据您所在的行业，健康，金融，银行，教育，非营利，汽车或媒体行业，Microsoft已发布了许多加速器或基础组件，可帮助您快速站稳解决方案。 有关更多信息，请参见<a target="_blank" rel="noopener" href="https://docs.microsoft.com/en-us/common-data-model/industry-accelerators?azureportal=true">行业加速器概述</a>。</p>
<h2 id="创建模型驱动的应用"><a href="#创建模型驱动的应用" class="headerlink" title="创建模型驱动的应用"></a>创建模型驱动的应用</h2><p>在本单元中，您将使用Microsoft Power Apps环境中可用的标准实体之一来创建模型驱动的应用程序。</p>
<h3 id="创建模型驱动的应用-1"><a href="#创建模型驱动的应用-1" class="headerlink" title="创建模型驱动的应用"></a>创建模型驱动的应用</h3><ol>
<li>使用您的组织帐户登录<a target="_blank" rel="noopener" href="https://make.powerapps.com/">Power Apps</a>。</li>
<li>选择所需的环境，或转到<a target="_blank" rel="noopener" href="https://admin.powerapps.com/">Power Apps管理中心</a>创建一个新环境。</li>
<li>在主页上，选择<strong>Model-driven app from blank</strong>。</li>
<li>单击<strong>Create。<img src="/posts/f1a42108/model-driven-app-from-blank.png" alt="Model-driven"></strong></li>
<li>在“创建新应用”页面上，输入应用的名称和说明。</li>
<li>选择完成。 您的新应用程序将出现在“应用程序设计器”中，现在您可以向其中添加组件。</li>
</ol>
<h3 id="将组件添加到您的应用"><a href="#将组件添加到您的应用" class="headerlink" title="将组件添加到您的应用"></a>将组件添加到您的应用</h3><p>您可以使用应用程序设计器将组件添加到您的应用程序。</p>
<ol>
<li>选择“<strong>Open the Site Map Designer</strong>”铅笔图标以打开站点地图设计器。<img src="/posts/f1a42108/app-designer-configuration.png" alt="Create a new site map"></li>
<li>在站点地图设计器中，选择New Subarea，然后在Properties选项卡的右窗格中选择以下属性：<ol>
<li><strong>Type</strong>: <em>Entity</em></li>
<li>*<strong>Entity</strong>: Account*</li>
<li><em><img src="/posts/f1a42108/sitemap-designer.png" alt="Add components to the site map"></em></li>
</ol>
</li>
<li>选择保存并关闭。</li>
<li>在App设计器中，选择“窗体”，然后在“主窗体”下的右窗格中，选择“帐户”窗体。<img src="/posts/f1a42108/account-forms.png" alt="Account main form"></li>
<li>在应用程序设计器中，选择“视图”，然后选择以下属性：<ol>
<li>Active Accounts</li>
<li>All Accounts</li>
<li>My Active Accounts</li>
</ol>
</li>
<li>在App Designer中，选择“图表”，然后选择“按行业划分的帐户”图表。</li>
<li>在App Designer工具栏上，选择“保存”。</li>
</ol>
<h3 id="创建窗体"><a href="#创建窗体" class="headerlink" title="创建窗体"></a>创建窗体</h3><ol>
<li>在左侧导航窗格中，展开Data，然后选择Entities。</li>
<li>选择一个实体，比如account实体，然后选择Forms选项卡。</li>
<li>选择Add form，然后选择以下选项之一<ol>
<li><strong>Main form</strong> 使用现有的主表单定义填充新表单的内容。 如果存在多个主要表单，则使用表单顺序位于列表顶部的表单来填充新表单。</li>
<li><strong>Quick create form</strong> 快速创建窗体</li>
<li><strong>Quick view form</strong> 快速浏览窗体</li>
</ol>
</li>
<li>完成对表单的更改后，选择Save以保存表单。</li>
</ol>
<h3 id="编辑窗体"><a href="#编辑窗体" class="headerlink" title="编辑窗体"></a>编辑窗体</h3><ol>
<li>在左侧导航窗格中，展开Data，然后选择Entities。</li>
<li>选择一个实体，比如account实体，然后选择Forms选项卡。</li>
<li>选择要编辑的表单名称。<ol>
<li>您还可以选择表单的行，然后在命令栏中选择Edit form</li>
<li>另一种方式是选择表单名称旁边的..，然后在菜单中选择Edit form。</li>
</ol>
</li>
<li>完成对表单的更改后，选择Save以保存表单。</li>
</ol>
<h3 id="在应用设计器中打开并添加视图"><a href="#在应用设计器中打开并添加视图" class="headerlink" title="在应用设计器中打开并添加视图"></a>在应用设计器中打开并添加视图</h3><p>下面的步骤解释了如何在app designer中打开和添加视图。</p>
<ol>
<li>在应用程序设计器的“<strong>Entity View</strong>”部分中，选择“<strong>Views</strong>”。<ol>
<li>在此示例中，我们从“帐户”实体中选择了“视图”。<img src="/posts/f1a42108/app-designer-add-view.png" alt="Account views"></li>
</ol>
</li>
<li>要添加视图，请使用“公共”，“高级查找”，“关联”和“查找”等视图类型进行选择。 该视图将自动添加到“视图”列表中。</li>
</ol>
<p>视图将根据所选择的实体显示。例如，当您选择Account时，将显示与Account实体相关的视图。</p>
<p>有关应用程序设计器的更多信息，请访问<a target="_blank" rel="noopener" href="https://docs.microsoft.com/en-us/powerapps/maker/model-driven-apps/design-custom-business-apps-using-app-designer">Design custom business apps by using the app designer</a>。</p>
<h3 id="在应用设计器中的视图中添加列"><a href="#在应用设计器中的视图中添加列" class="headerlink" title="在应用设计器中的视图中添加列"></a>在应用设计器中的视图中添加列</h3><p>视图在包含行和列的表中显示记录。每一行都是一个记录，从记录中显示的字段由添加到视图中的列决定。</p>
<ol>
<li>在app designer中，选择你想要的实体视图，然后在你想要的视图旁边的右边窗格中选择edit(铅笔按钮)。</li>
<li>在Components选项卡上，选择主实体或相关实体的列属性列表。<img src="/posts/f1a42108/column-attributes.png" alt="Account views"></li>
<li>从列表中选择所需的属性，并将其拖动到列标题。 您也可以通过双击添加属性。</li>
<li>重复步骤3，直到添加了想要在视图中显示的所有属性。</li>
</ol>
<p>在添加属性时，可以将它们拖动到现有列标题中的任何位置。还可以在将列添加到视图后移动它们。</p>
<p>有关创建和编辑视图的更多详细选项，请访问<a target="_blank" rel="noopener" href="https://docs.microsoft.com/powerapps/maker/model-driven-apps/create-edit-views-app-designer%E3%80%82">https://docs.microsoft.com/powerapps/maker/model-driven-apps/create-edit-views-app-designer。</a></p>
<h3 id="发布应用"><a href="#发布应用" class="headerlink" title="发布应用"></a>发布应用</h3><p>在App Designer工具栏上，选择Publish。发布应用程序后，就可以运行或与他人共享了。</p>
<p>在“我的有效帐户”上方，选择“显示图表”。</p>
<p>如果帐户的示例数据没有填充行业，那么进入几个帐户并添加一个行业。一旦你更新了一个行业的一些账户，图表也会更新。</p>
<p><img src="/posts/f1a42108/account-charts.png" alt="Simple account entity app"></p>
<h2 id="控制安全性并共享模型驱动的应用"><a href="#控制安全性并共享模型驱动的应用" class="headerlink" title="控制安全性并共享模型驱动的应用"></a>控制安全性并共享模型驱动的应用</h2><p>Microsoft Power Apps使用基于角色的安全性进行共享。 安全角色包括特权，这些特权定义了可以在应用程序中执行的一组操作。 必须将所有应用程序用户分配给一个或多个预定义或自定义安全角色。</p>
<p>可以将角色分配给个人用户或团队。 向用户或团队分配角色后，将向该用户或该团队的所有成员授予与该角色相关联的特权集。</p>
<p>要共享应用，您必须具有Environment Admin或System Admin角色。</p>
<h3 id="创建或设置安全角色"><a href="#创建或设置安全角色" class="headerlink" title="创建或设置安全角色"></a>创建或设置安全角色</h3><p>Power Apps环境包括预定义的安全角色。 这些角色反映了常见的用户任务，并且定义的访问级别遵循安全性最佳实践，即提供对使用该应用程序所需的最少业务数据的访问权限。</p>
<p>应用可以基于自定义实体。 由于实体是自定义的，因此必须先明确指定特权，然后用户才能使用它。 为此，可以使用以下两种方法之一：</p>
<ul>
<li>展开现有的预定义安全角色，使其包含基于自定义实体的记录的特权。</li>
<li>创建自定义安全角色来管理应用程序用户的特权。</li>
</ul>
<p>安全角色通过一组访问级别和权限来控制用户对数据的访问。 特定安全角色中包含的访问级别和权限的组合设置了对用户数据视图以及与该数据的交互的限制。</p>
<p>必须为该应用分配一个或多个安全角色。 用户可以使用的应用程序取决于他们分配给的安全角色。</p>
<p>Power Apps环境中提供了以下预定义角色。除非特别说明，否则所有特权都具有全局作用域。</p>
<table>
<thead>
<tr>
<th align="left"><strong>Security role</strong></th>
<th align="left"><strong>Privileges</strong></th>
<th align="left"><strong>Description</strong></th>
</tr>
</thead>
<tbody><tr>
<td align="left">Environment Maker</td>
<td align="left">None</td>
<td align="left">拥有此角色的用户可以创建与环境相关联的新资源，包括应用程序，连接，自定义应用程序编程接口（API），网关和使用Microsoft Flow的流。 但是这些用户无法在环境中访问数据。 要了解有关环境的更多信息，请参阅<a target="_blank" rel="noopener" href="https://powerapps.microsoft.com/blog/powerapps-environments/">Announcing Power Apps environments</a>。</td>
</tr>
<tr>
<td align="left">System Administrator</td>
<td align="left">Create, Read, Write, Delete, Customize</td>
<td align="left">该角色具有自定义或管理环境的完整权限，包括创建，更改和分配安全角色。 拥有此角色的用户可以查看环境中的所有数据。 要了解更多信息，请参阅<a target="_blank" rel="noopener" href="https://docs.microsoft.com/en-us/dynamics365/customer-engagement/customize/privileges-required-customization">Privileges required for customization</a>。</td>
</tr>
<tr>
<td align="left">System Customizer</td>
<td align="left">Create (self), Read (self), Write (self), Delete (self), Customizations</td>
<td align="left">该角色具有自定义环境的完全权限。 但是具有此角色的用户只能查看他们创建的环境实体的记录。 要了解更多信息，请参阅<a target="_blank" rel="noopener" href="https://docs.microsoft.com/en-us/dynamics365/customer-engagement/customize/privileges-required-customization">Privileges required for customization</a>。</td>
</tr>
<tr>
<td align="left">Common Data Service User</td>
<td align="left">Read, Create (self), write (self), delete (self)</td>
<td align="left">拥有此角色的用户可以在环境中运行应用程序，并为其拥有的记录执行常见任务。</td>
</tr>
<tr>
<td align="left">Delegate</td>
<td align="left">代表其他用户行事</td>
<td align="left">该角色允许代码以其他用户身份运行或模拟其他用户。 该角色通常与另一个安全角色一起使用，以提供对记录的访问。 要了解更多信息，请参阅<a target="_blank" rel="noopener" href="https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/org-service/impersonate-another-user">Impersonate another user</a>。</td>
</tr>
</tbody></table>
<h3 id="分享访问应用程序的链接"><a href="#分享访问应用程序的链接" class="headerlink" title="分享访问应用程序的链接"></a>分享访问应用程序的链接</h3><p>共享模型驱动的应用程序涉及两个主要步骤。 首先，将一个或多个安全角色与应用程序关联，然后将安全角色分配给用户。</p>
<ol>
<li>访问<a target="_blank" rel="noopener" href="https://make.powerapps.com/">https://make.powerapps.com</a></li>
<li>选择一个模型驱动的应用程序，然后单击共享。</li>
<li>选择应用程序，然后从列表中选择安全角色。<img src="/posts/f1a42108/share-model-driven-app.png" alt="Select the app and the security role"></li>
<li>搜索用户</li>
<li>选择用户，然后从列表中选择一个角色。<img src="/posts/f1a42108/share-role-user.png" alt="Select a role from the list"></li>
<li>单击共享。</li>
<li>按照下文的步骤分享你的应用程序的链接。</li>
</ol>
<p>与共享画布应用程序不同，共享模型驱动的应用程序当前不发送带有该应用程序链接的电子邮件。</p>
<h3 id="获取应用程序的直接链接"><a href="#获取应用程序的直接链接" class="headerlink" title="获取应用程序的直接链接"></a>获取应用程序的直接链接</h3><ol>
<li>编辑应用程序并单击Properties选项卡</li>
<li>复制<strong>Unified Interface URL.</strong></li>
<li>将应用程序URL粘贴到某个位置，以便您的用户可以访问它，例如通过将其发布到SharePoint网站或通过电子邮件发送。</li>
</ol>
<p><img src="/posts/f1a42108/copy-app-url.png" alt="Copy app URL"></p>
<h2 id="Knowledge-check"><a href="#Knowledge-check" class="headerlink" title="Knowledge check"></a>Knowledge check</h2><ol>
<li><p>When building model-driven apps, which designer is used to define the navigation of your app?</p>
<ul>
<li><p>App designer</p>
</li>
<li><p>View designer</p>
</li>
<li><p>Site map designer</p>
<p>【 Correct.】 The site map designer is used to define the navigation of your app by dragging components onto the design canvas, previewing your work, and instantly publishing the site map. Administrators and any user with the required privileges can quickly create site maps for apps.</p>
</li>
</ul>
</li>
<li><p>If you wanted to create a standard procedure or process for handling service requests, what type of logic would be best to implement?</p>
<ul>
<li><p>Business process flow</p>
<p>【Correct.】 Business process flows can be used to define a set of steps for people to follow to take them to a desired outcome.</p>
</li>
<li><p>Business rule</p>
</li>
<li><p>Workflow</p>
</li>
</ul>
</li>
<li><p>When sharing a model-driven app, which of the following statements is true?</p>
<ul>
<li><p>Users just need to be added to a predefined security role</p>
</li>
<li><p>Model-driven apps do not need to be shared, they are accessible to anyone with the app link.</p>
</li>
<li><p>Users need to be added to a predefined or custom security role and one or more security roles need to be associated with the app.</p>
<p>【Correct.】 Users must have a security role that grants them the right to access the app for you to successfully share the app.</p>
</li>
</ul>
</li>
</ol>
<h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>模型驱动的应用程序设计是一种针对组件的应用程序开发方法。 模型驱动的应用程序设计不需要代码，您制作的应用程序可以很简单也可以很复杂。 与canvas应用程序开发不同，画布设计人员可以完全控制应用程序的布局，而模型驱动的应用程序则由您决定，并且大部分由您添加到应用程序中的组件指定。</p>
<p>本模块涵盖以下概念：</p>
<ul>
<li>什么是模型驱动的应用程序以及它们与画布应用程序的区别</li>
<li>模型驱动的应用程序的构建块</li>
<li>如何设计和创建模型驱动的应用</li>
<li>如何更改安全性并共享模型驱动的应用程序</li>
</ul>

            </div>
            <hr/>

            

    <div class="reprint" id="reprint-statement">
        
            <div class="reprint__author">
                <span class="reprint-meta" style="font-weight: bold;">
                    <i class="fas fa-user">
                        文章作者:
                    </i>
                </span>
                <span class="reprint-info">
                    <a href="/about" rel="external nofollow noreferrer">Guo Yaxiang</a>
                </span>
            </div>
            <div class="reprint__type">
                <span class="reprint-meta" style="font-weight: bold;">
                    <i class="fas fa-link">
                        文章链接:
                    </i>
                </span>
                <span class="reprint-info">
                    <a href="https://www.codinghonest.space/posts/f1a42108.html">https://www.codinghonest.space/posts/f1a42108.html</a>
                </span>
            </div>
            <div class="reprint__notice">
                <span class="reprint-meta" style="font-weight: bold;">
                    <i class="fas fa-copyright">
                        版权声明:
                    </i>
                </span>
                <span class="reprint-info">
                    本博客所有文章除特別声明外，均采用
                    <a href="https://creativecommons.org/licenses/by/4.0/deed.zh" rel="external nofollow noreferrer" target="_blank">CC BY 4.0</a>
                    许可协议。转载请注明来源
                    <a href="/about" target="_blank">Guo Yaxiang</a>
                    !
                </span>
            </div>
        
    </div>

    <script async defer>
      document.addEventListener("copy", function (e) {
        let toastHTML = '<span>复制成功，请遵循本文的转载规则</span><button class="btn-flat toast-action" onclick="navToReprintStatement()" style="font-size: smaller">查看</a>';
        M.toast({html: toastHTML})
      });

      function navToReprintStatement() {
        $("html, body").animate({scrollTop: $("#reprint-statement").offset().top - 80}, 800);
      }
    </script>



            <div class="tag_share" style="display: block;">
                <div class="post-meta__tag-list" style="display: inline-block;">
                    
                        <div class="article-tag">
                            
                                <a href="/tags/PowerPlatform%E8%AE%A4%E8%AF%81/">
                                    <span class="chip bg-color">PowerPlatform认证</span>
                                </a>
                            
                        </div>
                    
                </div>
                <div class="post_share" style="zoom: 80%; width: fit-content; display: inline-block; float: right; margin: -0.15rem 0;">
                    <link rel="stylesheet" type="text/css" href="/libs/share/css/share.min.css">
<div id="article-share">

    
    <div class="social-share" data-sites="twitter,facebook,google,qq,qzone,wechat,weibo,douban,linkedin" data-wechat-qrcode-helper="<p>微信扫一扫即可分享！</p>"></div>
    <script src="/libs/share/js/social-share.min.js"></script>
    

    

</div>

                </div>
            </div>
            
                <style>
    #reward {
        margin: 40px 0;
        text-align: center;
    }

    #reward .reward-link {
        font-size: 1.4rem;
        line-height: 38px;
    }

    #reward .btn-floating:hover {
        box-shadow: 0 6px 12px rgba(0, 0, 0, 0.2), 0 5px 15px rgba(0, 0, 0, 0.2);
    }

    #rewardModal {
        width: 320px;
        height: 350px;
    }

    #rewardModal .reward-title {
        margin: 15px auto;
        padding-bottom: 5px;
    }

    #rewardModal .modal-content {
        padding: 10px;
    }

    #rewardModal .close {
        position: absolute;
        right: 15px;
        top: 15px;
        color: rgba(0, 0, 0, 0.5);
        font-size: 1.3rem;
        line-height: 20px;
        cursor: pointer;
    }

    #rewardModal .close:hover {
        color: #ef5350;
        transform: scale(1.3);
        -moz-transform:scale(1.3);
        -webkit-transform:scale(1.3);
        -o-transform:scale(1.3);
    }

    #rewardModal .reward-tabs {
        margin: 0 auto;
        width: 210px;
    }

    .reward-tabs .tabs {
        height: 38px;
        margin: 10px auto;
        padding-left: 0;
    }

    .reward-content ul {
        padding-left: 0 !important;
    }

    .reward-tabs .tabs .tab {
        height: 38px;
        line-height: 38px;
    }

    .reward-tabs .tab a {
        color: #fff;
        background-color: #ccc;
    }

    .reward-tabs .tab a:hover {
        background-color: #ccc;
        color: #fff;
    }

    .reward-tabs .wechat-tab .active {
        color: #fff !important;
        background-color: #22AB38 !important;
    }

    .reward-tabs .alipay-tab .active {
        color: #fff !important;
        background-color: #019FE8 !important;
    }

    .reward-tabs .reward-img {
        width: 210px;
        height: 210px;
    }
</style>

<div id="reward">
    <a href="#rewardModal" class="reward-link modal-trigger btn-floating btn-medium waves-effect waves-light red">赏</a>

    <!-- Modal Structure -->
    <div id="rewardModal" class="modal">
        <div class="modal-content">
            <a class="close modal-close"><i class="fas fa-times"></i></a>
            <h4 class="reward-title">你的赏识是我前进的动力</h4>
            <div class="reward-content">
                <div class="reward-tabs">
                    <ul class="tabs row">
                        <li class="tab col s6 alipay-tab waves-effect waves-light"><a href="#alipay">支付宝</a></li>
                        <li class="tab col s6 wechat-tab waves-effect waves-light"><a href="#wechat">微 信</a></li>
                    </ul>
                    <div id="alipay">
                        <img src="/medias/reward/alipay.png" class="reward-img" alt="支付宝打赏二维码">
                    </div>
                    <div id="wechat">
                        <img src="/medias/reward/wechat.png" class="reward-img" alt="微信打赏二维码">
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

<script>
    $(function () {
        $('.tabs').tabs();
    });
</script>

            
        </div>
    </div>

    

    

    

    

    

    
        <style>
    .mvaline-card {
        margin: 1.5rem auto;
    }

    .mvaline-card .card-content {
        padding: 20px 20px 5px 20px;
    }
</style>

<div class="card mvaline-card" data-aos="fade-up">
    <div class="comment_headling" style="font-size: 20px; font-weight: 700; position: relative; padding-left: 20px; top: 15px; padding-bottom: 5px;">
        <i class="fas fa-comments fa-fw" aria-hidden="true"></i>
        <span>评论</span>
    </div>
    <div id="mvcomments" class="card-content" style="display: grid">
    </div>
</div>

<script src="/libs/minivaline/MiniValine.js"></script>
<script>
    new MiniValine({
        el: '#mvcomments',
        appId: 'oqAo7rCWejwTqHjGC2APTVDX-MdYXbMMI',
        appKey: 'pfyY919tO7iJaDm7lFmvh5Wp',
        mode: 'DesertsP',
        placeholder: 'Write a Comment',
        pathname: window.location.pathname,
        lang: '',
        adminEmailMd5: '8BBC105436DAAF8C803841C8FD13CD0C',
        tagMeta: ["管理员", "小伙伴", "访客"],
        master: ["8BBC105436DAAF8C803841C8FD13CD0C"],
        friends: ["FA21C7921CD42FE9523E957870873F64", "586BAB41BB5692877F7714DFE4947DEC"],
        math: true,
        md: true,
        enableQQ: false,
        NoRecordIP: false,
        visitor: true,
        maxNest: 6,
        pageSize: 6,
        serverURLs: '',
        emoticonUrl: ["https://cdn.jsdelivr.net/npm/alus@latest", "https://cdn.jsdelivr.net/gh/MiniValine/qq@latest", "https://cdn.jsdelivr.net/gh/MiniValine/Bilibilis@latest", "https://cdn.jsdelivr.net/gh/MiniValine/tieba@latest", "https://cdn.jsdelivr.net/gh/MiniValine/twemoji@latest", "https://cdn.jsdelivr.net/gh/MiniValine/weibo@latest"],
    });
</script>

    

    

    

<article id="prenext-posts" class="prev-next articles">
    <div class="row article-row">
        
        <div class="article col s12 m6" data-aos="fade-up">
            <div class="article-badge left-badge text-color">
                <i class="fas fa-chevron-left"></i>&nbsp;上一篇</div>
            <div class="card">
                <a href="/posts/a781e8a4.html">
                    <div class="card-image">
                        
                        
                        <img src="/medias/featureimages/16.jpg" class="responsive-img" alt="PowerPlatform认证备考（7）—— Power Automate介绍">
                        
                        <span class="card-title">PowerPlatform认证备考（7）—— Power Automate介绍</span>
                    </div>
                </a>
                <div class="card-content article-content">
                    <div class="summary block-with-text">
                        
                            微软PowerPlatform认证考试的相关备考知识.
                        
                    </div>
                    <div class="publish-info">
                        <span class="publish-date">
                            <i class="far fa-clock fa-fw icon-date"></i>2020-11-16
                        </span>
                        <span class="publish-author">
                            
                            <i class="fas fa-bookmark fa-fw icon-category"></i>
                            
                            <a href="/categories/PowerPlatform/" class="post-category">
                                    PowerPlatform
                                </a>
                            
                            
                        </span>
                    </div>
                </div>
                
                <div class="card-action article-tags">
                    
                    <a href="/tags/PowerPlatform%E8%AE%A4%E8%AF%81/">
                        <span class="chip bg-color">PowerPlatform认证</span>
                    </a>
                    
                </div>
                
            </div>
        </div>
        
        
        <div class="article col s12 m6" data-aos="fade-up">
            <div class="article-badge right-badge text-color">
                下一篇&nbsp;<i class="fas fa-chevron-right"></i>
            </div>
            <div class="card">
                <a href="/posts/31a47d0f.html">
                    <div class="card-image">
                        
                        
                        <img src="/medias/featureimages/13.jpg" class="responsive-img" alt="PowerPlatform认证备考（5）—— Power Apps门户介绍">
                        
                        <span class="card-title">PowerPlatform认证备考（5）—— Power Apps门户介绍</span>
                    </div>
                </a>
                <div class="card-content article-content">
                    <div class="summary block-with-text">
                        
                            微软PowerPlatform认证考试的相关备考知识.
                        
                    </div>
                    <div class="publish-info">
                            <span class="publish-date">
                                <i class="far fa-clock fa-fw icon-date"></i>2020-11-16
                            </span>
                        <span class="publish-author">
                            
                            <i class="fas fa-bookmark fa-fw icon-category"></i>
                            
                            <a href="/categories/PowerPlatform/" class="post-category">
                                    PowerPlatform
                                </a>
                            
                            
                        </span>
                    </div>
                </div>
                
                <div class="card-action article-tags">
                    
                    <a href="/tags/PowerPlatform%E8%AE%A4%E8%AF%81/">
                        <span class="chip bg-color">PowerPlatform认证</span>
                    </a>
                    
                </div>
                
            </div>
        </div>
        
    </div>
</article>

</div>


<script>
    $('#articleContent').on('copy', function (e) {
        // IE8 or earlier browser is 'undefined'
        if (typeof window.getSelection === 'undefined') return;

        var selection = window.getSelection();
        // if the selection is short let's not annoy our users.
        if (('' + selection).length < Number.parseInt('120')) {
            return;
        }

        // create a div outside of the visible area and fill it with the selected text.
        var bodyElement = document.getElementsByTagName('body')[0];
        var newdiv = document.createElement('div');
        newdiv.style.position = 'absolute';
        newdiv.style.left = '-99999px';
        bodyElement.appendChild(newdiv);
        newdiv.appendChild(selection.getRangeAt(0).cloneContents());

        // we need a <pre> tag workaround.
        // otherwise the text inside "pre" loses all the line breaks!
        if (selection.getRangeAt(0).commonAncestorContainer.nodeName === 'PRE') {
            newdiv.innerHTML = "<pre>" + newdiv.innerHTML + "</pre>";
        }

        var url = document.location.href;
        newdiv.innerHTML += '<br />'
            + '来源: 码道诚公<br />'
            + '文章作者: Guo Yaxiang<br />'
            + '文章链接: <a href="' + url + '">' + url + '</a><br />'
            + '本文章著作权归作者所有，任何形式的转载都请注明出处。';

        selection.selectAllChildren(newdiv);
        window.setTimeout(function () {bodyElement.removeChild(newdiv);}, 200);
    });
</script>


<!-- 代码块功能依赖 -->
<script type="text/javascript" src="/libs/codeBlock/codeBlockFuction.js"></script>

<!-- 代码语言 -->

<script type="text/javascript" src="/libs/codeBlock/codeLang.js"></script>


<!-- 代码块复制 -->

<script type="text/javascript" src="/libs/codeBlock/codeCopy.js"></script>


<!-- 代码块收缩 -->

<script type="text/javascript" src="/libs/codeBlock/codeShrink.js"></script>


<!-- 代码块折行 -->

<style type="text/css">
code[class*="language-"], pre[class*="language-"] { white-space: pre !important; }
</style>


    

</main>




    <footer class="page-footer bg-color">
    
        <link rel="stylesheet" href="/libs/aplayer/APlayer.min.css">
<style>
    .aplayer .aplayer-lrc p {
        
        display: none;
        
        font-size: 12px;
        font-weight: 700;
        line-height: 16px !important;
    }

    .aplayer .aplayer-lrc p.aplayer-lrc-current {
        
        display: none;
        
        font-size: 15px;
        color: #42b983;
    }

    
    .aplayer.aplayer-fixed.aplayer-narrow .aplayer-body {
        left: -66px !important;
    }

    .aplayer.aplayer-fixed.aplayer-narrow .aplayer-body:hover {
        left: 0px !important;
    }

    
</style>
<div class="">
    
    <div class="row">
        <meting-js class="col l8 offset-l2 m10 offset-m1 s12"
                   server="netease"
                   type="playlist"
                   id="503838841"
                   fixed='true'
                   autoplay='false'
                   theme='#42b983'
                   loop='all'
                   order='random'
                   preload='auto'
                   volume='0.7'
                   list-folded='true'
        >
        </meting-js>
    </div>
</div>

<script src="/libs/aplayer/APlayer.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/meting@2/dist/Meting.min.js"></script>

    
    <div class="container row center-align" style="margin-bottom: 0px !important;">
        <div class="col s12 m8 l8 copy-right">
            Copyright&nbsp;&copy;
            
                <span id="year">2020-2021</span>
            
            <span id="year">2020</span>
            <a href="/about" target="_blank">Guo Yaxiang</a>
            |&nbsp;Powered by&nbsp;<a href="https://hexo.io/" target="_blank">Hexo</a>
            |&nbsp;Theme&nbsp;<a href="https://github.com/blinkfox/hexo-theme-matery" target="_blank">Matery</a>
            <br>
            
            
            
            
            
            <br>
            
            <br>
            
        </div>
        <div class="col s12 m4 l4 social-link ">
    <a href="https://github.com/GuoYaxiang" class="tooltipped" target="_blank" data-tooltip="访问我的GitHub" data-position="top" data-delay="50">
        <i class="fab fa-github"></i>
    </a>



    <a href="mailto:YXGyxg112358@163.com" class="tooltipped" target="_blank" data-tooltip="邮件联系我" data-position="top" data-delay="50">
        <i class="fas fa-envelope-open"></i>
    </a>







    <a href="tencent://AddContact/?fromId=50&fromSubId=1&subcmd=all&uin=1431800679" class="tooltipped" target="_blank" data-tooltip="QQ联系我: 1431800679" data-position="top" data-delay="50">
        <i class="fab fa-qq"></i>
    </a>





    <a href="https://www.zhihu.com/people/guo-ya-xiang" class="tooltipped" target="_blank" data-tooltip="关注我的知乎: https://www.zhihu.com/people/guo-ya-xiang" data-position="top" data-delay="50">
        <i class="fab fa-zhihu1">知</i>
    </a>



    <a href="/atom.xml" class="tooltipped" target="_blank" data-tooltip="RSS 订阅" data-position="top" data-delay="50">
        <i class="fas fa-rss"></i>
    </a>

</div>
    </div>
</footer>

<div class="progress-bar"></div>


    <!-- 搜索遮罩框 -->
<div id="searchModal" class="modal">
    <div class="modal-content">
        <div class="search-header">
            <span class="title"><i class="fas fa-search"></i>&nbsp;&nbsp;搜索</span>
            <input type="search" id="searchInput" name="s" placeholder="请输入搜索的关键字"
                   class="search-input">
        </div>
        <div id="searchResult"></div>
    </div>
</div>

<script src="/js/search.js"></script>
<script type="text/javascript">
$(function () {
    searchFunc('/search.xml', 'searchInput', 'searchResult');
});
</script>

    <!-- 回到顶部按钮 -->
<div id="backTop" class="top-scroll">
    <a class="btn-floating btn-large waves-effect waves-light" href="#!">
        <i class="fas fa-arrow-up"></i>
    </a>
</div>


    <script src="/libs/materialize/materialize.min.js"></script>
    <script src="/libs/masonry/masonry.pkgd.min.js"></script>
    <script src="/libs/aos/aos.js"></script>
    <script src="/libs/scrollprogress/scrollProgress.min.js"></script>
    <script src="/libs/lightGallery/js/lightgallery-all.min.js"></script>
    <script src="/js/matery.js"></script>

    <!-- Baidu Analytics -->

    <!-- Baidu Push -->

<script>
    (function () {
        var bp = document.createElement('script');
        var curProtocol = window.location.protocol.split(':')[0];
        if (curProtocol === 'https') {
            bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
        } else {
            bp.src = 'http://push.zhanzhang.baidu.com/push.js';
        }
        var s = document.getElementsByTagName("script")[0];
        s.parentNode.insertBefore(bp, s);
    })();
</script>

    
    <script src="/libs/others/clicklove.js" async="async"></script>
    
    

    
        <script src="//code.tidio.co/zgiqinzrat1rzwxseqhr2pnzsp2a4rjo.js"></script>
        <script>
            $(document).ready(function () {
                setInterval(change_Tidio, 50);
                function change_Tidio() {
                    var tidio=$("#tidio-chat iframe");
                    if(tidio.css("display")=="block"&& $(window).width()>977 ){
                        document.getElementById("tidio-chat-iframe").style.bottom= ($("div#backTop.top-scroll").css("display")=="none" &&$(window).width()>977)>0? "-40px" : ($("div.toc-title").length&&$(window).width()>977)>0?"85px":"20px";
                        document.getElementById("tidio-chat-iframe").style.right="-15px";
                        document.getElementById("tidio-chat-iframe").style.height=parseInt(tidio.css("height"))>=520?"520px":tidio.css("height");
                        document.getElementById("tidio-chat-iframe").style.zIndex="997";
                    }
                    else if(tidio.css("display")=="block"&&$(window).width()>601 &&$(window).width()<992 ){
                        document.getElementById("tidio-chat-iframe").style.bottom= ($("div#backTop.top-scroll").css("display")=="none" && 601< $(window).width()<992)>0? "-40px":"20px" ;
                        document.getElementById("tidio-chat-iframe").style.right="-15px";
                        document.getElementById("tidio-chat-iframe").style.zIndex="997";
                    }
                    else if(tidio.css("display")=="block"&&$(window).width()<601 && parseInt(tidio.css("height"))<230){
                        document.getElementById("tidio-chat-iframe").style.bottom= ($("div#backTop.top-scroll").css("display")=="none" && $(window).width()<601)>0? "-10px":"45px" ;
                        document.getElementById("tidio-chat-iframe").style.zIndex="997";
                    }
                    if( tidio.css("display")=="block"&&$(window).width()<601 && parseInt(tidio.css("height"))>=230){
                        document.getElementById("tidio-chat-iframe").style.zIndex="998";
                    }
                }
            });
        </script>
    

    

    

    

    

    
    <script src="/libs/instantpage/instantpage.js" type="module"></script>
    

</body>

</html>
